package hibernate;

/**
 * 
 */


import java.util.Collection;
import java.util.List;

import org.hibernate.Session;

/**
 * @author zhenjw
 * 
 */
public interface IBaseDao {

	/**
	 * 功能：获得数据库连接的Session
	 * 
	 * @return Session
	 */
	public Session getSession();

	/**
	 * 功能：根据hql语句得到记录总数
	 * 
	 * @param strhql
	 * @return int
	 */
	public int getTotalCount(String strhql);

	/**
	 * 功能：根据sql语句得到记录总数
	 * 
	 * @param strsql
	 * @return int
	 */
	public int getTotalCountBySql(String strsql);

	/**
	 * 功能：根据hql语句得到记录总数
	 * 
	 * @param strhql
	 * @param obj
	 * @return int
	 */
	public int getTotalCount(String strhql, Object obj);
	
	 
	/**
	 * 功能：根据hql语句得到记录总数
	 * @param strhql
	 * @param params
	 * @return int
	 */
	public int getTotalCount(String strhql, List params);
	
	/**
	 * 功能：根据sql语句得到记录总数
	 * @param strsql
	 * @param param
	 * @return
	 */
	public int getTotalCountBySql(String strsql, List params);
	
	 
	 
	/**
	 * 功能：增加记录
	 * 
	 * @param entity
	 */
	public void create(Object entity);

	/**
	 * 功能：修改记录
	 * 
	 * @param entity
	 */
	public void update(Object entity);

	/**
	 * 功能：删除记录
	 * 
	 * @param entity
	 */
	public boolean delete(Object entity);

	/**
	 * 功能：删除数据
	 * 
	 * @param clazz
	 * @param id
	 */
	public boolean delete(Class clazz, Integer id);

	/**
	 * 功能：批量删除数据
	 * 
	 * @param clazz
	 * @param id
	 */
	public boolean batchDelete(Class clazz, Integer[] id);

	/**
	 * 功能：删除表中的所有的记录
	 * 
	 * @param clazz
	 */
	public void deleteAll(Class clazz);

	/**
	 * 功能：删除记录集中的所有的记录
	 * 
	 * @param entities
	 */
	public void deleteAll(Collection entities);;

	/**
	 * 功能：通过主键查询记录
	 * 
	 * @param clazz
	 * @param id
	 * @return Object
	 */

	public Object getByPk(Class clazz, Integer id);

	

	/**
	 * 功能：通过主键查询记录
	 * 
	 * @param clazz
	 * @param id
	 * @return Object
	 */
	public Object getByPk(Class clazz, String id);

	/**
	 * 功能：通过关键字和值来进行查询
	 * 
	 * @param clazz
	 * @param keyName
	 * @param keyValue
	 * @return 得到的Object是List
	 */
	public Object loadByPk(Class clazz, String keyName, Object keyValue);

	/**
	 * 功能：根据hql查询记录
	 * 
	 * @param strhql
	 * @return List
	 */
	public List find(String strhql);

	/**
	 * 功能：根据hql查询记录
	 * 
	 * @param strhql
	 * @param param
	 * @return List
	 */
	public List find(String strhql, Object param);

	/**
	 * 功能：根据hql查询记录
	 *  
	 * @param strhql
	 * @param name
	 * @param param
	 * @return List
	 */
	public List findByNamedParam(String strhql, String name, Object param);

	
	/**
	 * 功能：SQL查询
	 * @param strsql
	 * @return
	 */
	public List findBySql(String strsql);
	
	/**
	 * 功能：查询符合条件的记录。
	 * @param strsql
	 * @param params
	 * @return
	 */
	public List findBySql(String strsql,List params);  
  
	/**
	 * 功能：分页查询
	 * 
	 * @param pageNo
	 * @param pageSize
	 * @param strhql
	 * @return List
	 */
	public List query(int pageNo, int pageSize, String strhql);

	/**
	 * 功能：分页查询
	 * 
	 * @param pageNo
	 * @param pageSize
	 * @param queryString
	 * @param obj
	 * @return List
	 */
	public List query(int pageNo, int pageSize, String strhql, Object obj);
	
	
	/**
	 * 功能：分页查询
	 * @param pageNo
	 * @param pageSize
	 * @param strhql
	 * @param params
	 * @return
	 */
	public List query(int pageNo, int pageSize, String strhql, List params );

 
	
	/**
	 * 功能：分页查询
	 * 
	 * @param pageNo
	 * @param pageSize
	 * @param strsql
	 * @return List
	 */
	public List queryBySql(int pageNo, int pageSize, String strsql); 

	/**
	 * 功能：分页查询
	 * @param pageNo
	 * @param pageSize
	 * @param strsql
	 * @param params
	 * @return
	 */
	public List queryBySql(int pageNo, int pageSize, String strsql, List params) ;
	
	 
	/**
	 * 功能：执行SQL语句，主要是更新与删除记录的SQL语句，不需要返回值的
	 * 
	 * @param strsql
	 */
	public boolean excuteSql(String strsql);	
	public  void  save(Object object);
	public void save(List objects);
	public void delete(List objects);
	public Object getById(String className,Integer id);
	public List getList(String className);
	
}